import global from "@/utils/global.data.params";
import mars from "@/config/mars3d";
import storages from "@/utils/storage";
// console.log(mars.mars3d.MaterialType);
/**
 * 标绘属性配置文件
 * @author scw 2024-2-18 15:30:12
 */
// 默认填充的文字信息
const defaultText = storages.get("defaultText");

/**
 * 旋转贴地文字设置旋转时间算法
 */
let rotation = mars.Cesium.Math.toRadians(30);
function getRotationValue() {
    rotation += 0.005;
    return rotation;
}

function getObjectVal(data: any, data2?: any) {
    var _data: any = {};
    let keys = Object.keys(data);
    keys.forEach((v: any) => {
        _data[v] = data[v];
    });
    if (data2) {
        // console.log(data2);
        let keys2 = Object.keys(data2);
        keys2.forEach((v: any) => {
            _data[v] = data2[v];
        });
    }
    return _data;
}
const textLabel = {
    // 支持附带文字的显示
    text: "", // 文本内容，换行可以用换行符'\n'。
    font_family: "宋体", // 字体 ,可选项：微软雅黑,宋体,楷体,隶书,黑体 等
    font_size: 30, // 字体大小
    ont_family: "宋体", // 字体 ,可选项：微软雅黑,宋体,楷体,隶书,黑体 等
    color: "#FF0101", // 文本颜色
    outline: false, // 是否衬色
    outlineColor: "#ffffff", // 衬色颜色
    outlineWidth: 1, // 衬色宽度
    visibleDepth: false, // 是否被遮挡
    clampToGround: true, // 是否贴地
    font_weight: "normal", // 是否加粗 ,可选项：bold (解释：是),normal (解释：否),
    font_style: "normal", // 是否斜体 ,可选项：italic (解释：是),normal (解释：否),
    background: false, // 是否背景
    backgroundColor: "#ffffff", // 背景颜色
    hasPixelOffset: false, // 是否存在偏移量
    pixelOffsetX: 0, // 横向偏移像素
    pixelOffsetY: 0, // 纵向偏移像素
};
const materialOptionsText = {
    text: defaultText,
    font_size: 50,
    color: "#ffff00",
    font_family: "宋体",
    font_weight: "normal", // 是否加粗 ,可选项：bold (解释：是),normal (解释：否),
    font_style: "normal", // 是否斜体 ,可选项：italic (解释：是),normal (解释：否),
    stroke: false, // 是否描边文本
    strokeColor: "#ffffff", // 描边的颜色
    strokeWidth: 1, // 描边的宽度
    background: false, // 是否背景
    backgroundColor: "#ffffff", // 背景颜色
    backgroundPadding: 0, // 背景内边距，指定文字与填充边界内容之间的空间(以像素为单位)。
};
/**
 * 图上文字
 *  @author scw 2024-2-18 16:42:32
 */
export const label: any = {
    /**
     * 普通文字初始样式
     */
    labelStyle: {
        text: defaultText, // 文本内容，换行可以用换行符'\n'。
        font_family: "宋体", // 字体 ,可选项：微软雅黑,宋体,楷体,隶书,黑体 等
        color: "#0081c2", // 文本颜色
        font_size: 27, // 字体大小
        outline: false, // 是否衬色
        outlineColor: "#ffffff", // 衬色颜色
        outlineWidth: 1, // 衬色宽度
        clampToGround: true, // 是否贴地
        font_weight: "normal", // 是否加粗 ,可选项：bold (解释：是),normal (解释：否),
        font_style: "normal", // 是否斜体 ,可选项：italic (解释：是),normal (解释：否),
        background: false, // 是否背景
        backgroundColor: "#ffffff", // 背景颜色
        scaleByDistance: false, // 是否按视距缩放 或 设定基于与相机的距离设置比例。
        scaleByDistance_far: 1000000, // 上限
        scaleByDistance_farValue: 0.1, // 上限比例值
        scaleByDistance_near: 1000, // 下限
        scaleByDistance_nearValue: 1, // 下限比例值
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        visibleDepth: false,
    },
    /**
     * 立面文字初始样式
     */
    facadeLabelStyle: {
        diffHeight: 50,
        materialType: mars.mars3d.MaterialType.Text,
        outline: false, // 是否边框
        outlineWidth: 1, // 边框宽度
        outlineColor: "#ffffff", // 边框颜色
        materialOptions: getObjectVal(materialOptionsText),
        clampToGround: true,
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
    },
    /**
     * 贴地旋转文字初始样式
     */
    rotatelabelStyle: {
        materialType: mars.mars3d.MaterialType.Text,
        outline: false, // 是否边框
        outlineWidth: 1, // 边框宽度
        outlineColor: "#ffffff", // 边框颜色
        materialOptions: getObjectVal(materialOptionsText),
        clampToGround: true,
        rotation: new mars.Cesium.CallbackProperty(getRotationValue, false),
        stRotation: new mars.Cesium.CallbackProperty(getRotationValue, false),
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
    },
    /**
     * 跑马文字初始样式
     */
    marqueelabelStyle: {
        classificationType: mars.Cesium.ClassificationType.BOTH,
        rotationDegree: 0,
        clampToGround: true,
        materialType: mars.mars3d.MaterialType.Text,
        materialOptions: getObjectVal(materialOptionsText, { speed: 5 }),
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        outline: false, // 是否边框
        outlineWidth: 1, // 边框宽度
        outlineColor: "#ffffff", // 边框颜色
    },
};
/**
 * 图上标点
 *  @author scw 2024-2-19 11:31:05
 */
export const point: any = {
    /**
     * 图标点
     */
    point: {
        image: "http://mars3d.cn/img/marker/mark-blue.png", // 用于矢量对象的 图像、URI或Canvas
        scale: 1, // 图像大小的比例
        rotationDegree: 0, // 旋转角度（度数值，0-360度），与rotation二选一
        scaleByDistance: false, // 是否按视距缩放 或 设定基于与相机的距离设置比例。
        scaleByDistance_far: 1000000, // 上限
        scaleByDistance_farValue: 0.1, // 上限比例值
        scaleByDistance_near: 1000, // 下限
        scaleByDistance_nearValue: 1, // 下限比例值
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        visibleDepth: false, // 是否被遮挡
        clampToGround: true, // 是否贴地
        isLabel: false, // 是否文字
        label: textLabel,
    },
};
/**
 * 图上线段
 *  @author scw 2024-2-20 11:19:41
 */
export const segment: any = {
    /**
     * 线段
     */
    line: {
        color: "#ffff00",
        width: 2,
        clampToGround: true,
        materialType: "Color", // 线型
        materialOptions: {
            color: "#ffff00",
        },
        // scaleByDistance: false, // 是否按视距缩放 或 设定基于与相机的距离设置比例。
        // scaleByDistance_far: 1000000, // 上限
        // scaleByDistance_farValue: 0.1, // 上限比例值
        // scaleByDistance_near: 1000, // 下限
        // scaleByDistance_nearValue: 1, // 下限比例值
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        visibleDepth: false, // 是否被遮挡
        label: textLabel,
        isLabel: false, // 是否文字
        isLength: false, // 是否长度
    },
    /**
     * 曲线
     */
    curve: {
        color: "#ffff00",
        width: 2,
        clampToGround: true,
        materialType: "Color", // 线型
        materialOptions: {
            color: "#ffff00",
        },
        // scaleByDistance: false, // 是否按视距缩放 或 设定基于与相机的距离设置比例。
        // scaleByDistance_far: 1000000, // 上限
        // scaleByDistance_farValue: 0.1, // 上限比例值
        // scaleByDistance_near: 1000, // 下限
        // scaleByDistance_nearValue: 1, // 下限比例值
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        visibleDepth: false, // 是否被遮挡
        label: textLabel,
        isLabel: false, // 是否文字
        isLength: false, // 是否长度
    },
    /**
     * 管道
     */
    polylineVolume: {
        shape: "pipeline",
        radius: 10,
        thicknes: 1,
        slices: 100,
        color: "#ffff00",
        startAngle: 0,
        materialType: "Color", // 线型
        // materialOptions: {
        //     color: "#ffff00",
        // },
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        visibleDepth: false, // 是否被遮挡
        clampToGround: true, // 是否贴地
        label: textLabel,
        isLabel: false, // 是否文字
        isLength: false, // 是否长度
    },
    /**
     * 走廊
     */
    corridor: {
        width: 2, // 走廊宽度，指定走廊边缘之间的距离。
        height: 0, // 高程
        diffHeight: 2, // 高度差（走廊本身的高度），与extrudedHeight二选一
        color: "#ffff00", // 颜色
        outline: false, // 是否边框
        outlineWidth: 1, // 边框宽度
        outlineColor: "#FF0000", // 边框颜色
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        // clampToGround: true, // 是否贴地-设置后高程和高度无效
        label: textLabel,
        isLabel: false, // 是否文字
        isLength: false, // 是否长度
    },
    /**
     * 围栏
     */
    rail: {
        // width: 2, // 走廊宽度，指定走廊边缘之间的距离。
        diffHeight: 3, // 墙高，
        fill: true, // 是否填充
        materialType: "Color", // 填充类型
        materialOptions: {
            color: "#F0F000",
        }, // 材质参数
        closure: false, // 是否闭合, 在positions是属性机制的回调对象时无效
        outline: false, // 是否边框
        outlineWidth: 1, // 边框宽度
        outlineColor: "#FF0000", // 边框颜色
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        clampToGround: true, // 是否贴地
        label: textLabel,
        isLabel: false, // 是否文字
        isLength: false, // 是否长度
    },

    /**
     * 道路
     */
    road: {
        image: "http://mars3d.cn/img/textures/road.jpg", // 道路-图片材质URL
        width: 5, // 道路 宽度。(单位：米)
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        clampToGround: true, // 是否贴地
        label: textLabel,
        isLabel: false, // 是否文字
        isLength: false, // 是否长度
    },
};

/**
 * 二维平面
 *  @author scw 2024年2月28日
 */
export const twoDimensional: any = {
    /**
     * 平面
     */
    plane: {
        dimensions_x: 100, // 长度
        dimensions_y: 100, // 宽度
        plane_normal: "z", // 方向 ,可选项：x (解释：X轴),y (解释：Y轴),z (解释：Z轴),
        plane_distance: 0, //偏移距离
        heading: 0, //方向角 （度数值，0-360度）
        pitch: 0, //俯仰角（度数值，0-360度）
        roll: 0, //翻滚角（度数值，0-360度）
        fill: true, //是否填充
        materialType: "Color", //填充类型
        materialOptions: {
            color: "#FFFF00",
        },
        outline: false, //是否边框
        outlineWidth: 1, //边框宽度
        outlineColor: "#FF0101", //边框颜色
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        clampToGround: true, // 是否贴地
        visibleDepth: false, // 是否被遮挡
        label: textLabel,
        isLabel: false, // 是否文字
        isLength: false, // 是否长度
    },
    /**
     * 矩形
     */
    rectangle: {
        fill: true, //是否填充
        // height: 0, //是否填充
        // extrudedHeight: 20,
        materialType: "Color", //填充类型
        materialOptions: {
            color: "#FFFF00",
        },
        outline: false, //是否边框
        outlineWidth: 1, //边框宽度
        outlineColor: "#FF0101", //边框颜色
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        clampToGround: true, // 是否贴地
        label: textLabel,
        isLabel: false, // 是否文字
        isLength: false, // 是否长度
    },
    /**
     * 多边形
     */
    polygon: {
        fill: true, //是否填充
        // height: 0, //是否填充
        // extrudedHeight: 20,
        materialType: "Color", //填充类型
        materialOptions: {
            color: "#FFFF00",
        },
        outline: false, //是否边框
        outlineWidth: 1, //边框宽度
        outlineColor: "#FF0101", //边框颜色
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        clampToGround: true, // 是否贴地
        label: textLabel,
        isLabel: false, // 是否文字
        isLength: false, // 是否长度
    },
    /**
     * 正多边形
     */
    regular: {
        fill: true, //是否填充
        border: 3,
        radius: 10,
        materialType: "Color", //填充类型
        materialOptions: {
            color: "#FFFF00",
        },
        outline: false, //是否边框
        outlineWidth: 1, //边框宽度
        outlineColor: "#FF0101", //边框颜色
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        clampToGround: true, // 是否贴地
        label: textLabel,
        isLabel: false, // 是否文字
        isLength: false, // 是否长度
    },
    /**
     * 圆形
     */
    circle: {
        fill: true, //是否填充
        // height: 0, //是否填充
        // extrudedHeight: 20,
        // color: "#FFFF00",
        materialType: "Color", //填充类型
        materialOptions: {
            color: "#FFFF00",
        },
        outline: false, //是否边框
        outlineWidth: 1, //边框宽度
        outlineColor: "#FF0101", //边框颜色
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        clampToGround: false, // 是否贴地
        label: textLabel,
        isLabel: false, // 是否文字
        isLength: false, // 是否长度
    },

    /**
     * 扇形
     */
    sector: {
        fill: true, //是否填充
        radius: 5,
        // height: 0, //是否填充
        // extrudedHeight: 20,
        materialType: "Color", //填充类型
        materialOptions: {
            color: "#FFFF00",
        },
        outline: false, //是否边框
        outlineWidth: 1, //边框宽度
        outlineColor: "#FF0101", //边框颜色
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        clampToGround: false, // 是否贴地
        label: textLabel,
        isLabel: false, // 是否文字
        isLength: false, // 是否长度
    },
    /**
     * 椭圆
     */
    ellipse: {
        fill: true, //是否填充
        // height: 0, //是否填充
        // extrudedHeight: 20,
        materialType: "Color", //填充类型
        materialOptions: {
            color: "#FFFF00",
        },
        outline: false, //是否边框
        outlineWidth: 1, //边框宽度
        outlineColor: "#FF0101", //边框颜色
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        clampToGround: true, // 是否贴地
        label: textLabel,
        isLabel: false, // 是否文字
        isLength: false, // 是否长度
    },
};
/**
 * 三维立体
 *  @author scw 2024年2月29日
 */
export const threedimensional: any = {
    /**
     * 立体
     */
    box: {
        dimensions_x: 10,
        dimensions_y: 10,
        dimensions_z: 10,
        heading: 0,
        pitch: 0,
        roll: 0,
        fill: true, //是否填充
        materialType: "Color", //填充类型
        materialOptions: {
            color: "#FFFF00",
        },
        outline: false, //是否边框
        outlineWidth: 1, //边框宽度
        outlineColor: "#FF0101", //边框颜色
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        clampToGround: false, // 是否贴地
        label: textLabel,
        isLabel: false, // 是否文字
        isLength: false, // 是否长度
    },
    /**
     * 圆柱
     */
    column: {
        radius: 10,
        height: 0,
        diffHeight: 10,
        fill: true, //是否填充
        materialType: "Color", //填充类型
        materialOptions: {
            color: "#FFFF00",
        },
        outline: false, //是否边框
        outlineWidth: 1, //边框宽度
        outlineColor: "#FF0101", //边框颜色
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        clampToGround: false, // 是否贴地
        label: textLabel,
        isLabel: false, // 是否文字
        isLength: false, // 是否长度
    },
    /**
     * 椭圆柱
     */
    ellipticCylinder: {
        fill: true, //是否填充
        height: 0, //是否填充
        extrudedHeight: 20,
        materialType: "Color", //填充类型
        materialOptions: {
            color: "#FFFF00",
        },
        outline: false, //是否边框
        outlineWidth: 1, //边框宽度
        outlineColor: "#FF0101", //边框颜色
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        clampToGround: false, // 是否贴地
        label: textLabel,
        isLabel: false, // 是否文字
        isLength: false, // 是否长度
    },
    /**
     * 圆锥
     */
    cylinder: {
        // topRadius: 1,
        // bottomRadius: 10,
        // length: 10,
        heading: 0,
        pitch: 0,
        roll: 0,

        fill: true, //是否填充
        // height: 0, //是否填充
        // extrudedHeight: 20,
        materialType: "Color", //填充类型
        materialOptions: {
            color: "#FFFF00",
        },
        outline: false, //是否边框
        outlineWidth: 1, //边框宽度
        outlineColor: "#FF0101", //边框颜色
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        clampToGround: true, // 是否贴地
        label: textLabel,
        isLabel: false, // 是否文字
        isLength: false, // 是否长度
    },
    /**
     * 球及椭球
     */
    ellipsoid: {
        // radii_x: 10,
        // radii_y: 10,
        // radii_z: 10,
        innerRadii_x: 10,
        innerRadii_y: 10,
        innerRadii_z: 10,
        minimumClockDegree: 0,
        maximumClockDegree: 360, //最大时钟角度（度数值，0-360度）
        minimumConeDegree: 0,
        maximumConeDegree: 360, //最大圆锥角（度数值，0-360度）
        heading: 0,
        pitch: 0,
        roll: 0,

        fill: true, //是否填充
        height: 0, //是否填充
        extrudedHeight: 20,
        materialType: "Color", //填充类型
        materialOptions: {
            color: "#FFFF00",
        },
        outline: false, //是否边框
        outlineWidth: 1, //边框宽度
        outlineColor: "#FF0101", //边框颜色
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        clampToGround: false, // 是否贴地
        label: textLabel,
        isLabel: false, // 是否文字
        isLength: false, // 是否长度
    },
    /**
     * 雷达及半球
     */
    radar: {
        // radii_x: 10,
        // radii_y: 10,
        // radii_z: 10,
        innerRadii_x: 10,
        innerRadii_y: 10,
        innerRadii_z: 10,
        minimumClockDegree: 0,
        maximumClockDegree: 360, //最大时钟角度（度数值，0-360度）
        minimumConeDegree: 0,
        maximumConeDegree: 90, //最大圆锥角（度数值，0-360度）
        heading: 0,
        pitch: 0,
        roll: 0,

        fill: true, //是否填充
        height: 0, //是否填充
        extrudedHeight: 20,
        materialType: "Color", //填充类型
        materialOptions: {
            color: "#FFFF00",
        },
        outline: false, //是否边框
        outlineWidth: 1, //边框宽度
        outlineColor: "#FF0101", //边框颜色
        distanceDisplayCondition: false, // 是否按视距显示 或 指定此框将显示在与摄像机的多大距离。
        distanceDisplayCondition_far: 100000, // 最大距离
        distanceDisplayCondition_near: 0, // 最小距离
        clampToGround: false, // 是否贴地
        label: textLabel,
        isLabel: false, // 是否文字
        isLength: false, // 是否长度
    },
};
